package cn.yitun.chat.yitunservermanagecore.general.manage.system.service;

import cn.yitun.chat.yitunservercommonlib.crud.yitun.CrudService;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.system.user.ResetPwdDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.system.user.UserDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.dto.userchat.UserHeadDto;
import cn.yitun.chat.yitunservercommonlib.dataentity.po.system.user.UserInfo;
import cn.yitun.chat.yitunservercommonlib.dataentity.po.system.UserRoleInfo;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.user.UserVo;

import java.util.List;

/**
 * 
 * date 2018-07-17 22:39:50<br>
 * description
 * 
 * @author yitun<br>
 * @since
 */
public interface UserService
		extends CrudService<UserDto, UserInfo, UserVo> {

	/**
	 * 跟据id获取用户实体
	 * @param id
	 */
	UserInfo getById(Long id);

	UserVo getVo(Long id);

	/**
	 * 根据id是否存在执行新增或者修改
	 * @param user
	 */

	void addOrUpdate(UserDto user, List<Long> roleIds);

	/**
	 * 查询用户()
	 * @param userQuery
	 * @return
	 */
	List<UserVo> queryUserDataList(UserDto userQuery);

	/**
	 * 根据id删除用户
	 * 
	 * @param id
	 */
	void delete(Long id);

	UserInfo getUserByAccount(String account);

	UserVo getUserVoByAccount(String account);

	boolean isExistAccount(String account, Long id);

	int updatePassword(Long userId, String password);
	
	/**
	 * 修改用户类型
	 * @param userId
	 * @param type
	 * @return
	 */
	int updateType(Long userId, String type);

	/**
	 * 获取系统用户的角色列表
	 * @param userId
	 * @return
	 */
	List<UserRoleInfo> getUserRoleInfoListByUserId(Long userId);

	/**
	 * 更新个人信息
	 * @param userDto
	 * @return
	 */
    int updatePersonal(UserDto userDto, UserHeadDto userHead);

	/**
	 * 修改密码
	 * @param resetPwdDto
	 * @param userInfo
	 * @return
	 */
	int resetPwd(ResetPwdDto resetPwdDto, UserInfo userInfo);

	/**
	 * 管理员修改用户密码
	 * @param resetPwdDto
	 * @return
	 */
	int adminResetPwd(ResetPwdDto resetPwdDto);
}
